﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Negocio;
using Negocio.catalogos;
using Microsoft.Reporting.WebForms;


namespace Presentacion.controlasistencia
{
    public partial class reporteDiarioComision : System.Web.UI.Page
    {
        catalogoCarrera _objCarrera = new catalogoCarrera();
        catalogoPeriodo _objPeriodo = new catalogoPeriodo();
        catalogoDistribucion _objDistribucion = new catalogoDistribucion();
        catalogoDocente _objDocente = new catalogoDocente();
        catalogoReporte _objReporte = new catalogoReporte();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (Session["admin"] != null || Session["vicerrectorado"] != null)
                {
                    foreach (var item in _objCarrera.obtenerTodasCarreras())
                    {
                        ddlCarrera.Items.Add(new ListItem(item.carrera, item.idCarrera.ToString()));
                    }
                    foreach (var item in _objPeriodo.obtenerPeriodoxTOP().OrderByDescending(C => C.idPeriodo))
                    {
                        ddlPeriodo.Items.Add(new ListItem(item.nombre, item.idPeriodo.ToString()));
                    }
                    ReportViewer1.Visible = false;
                }
            }
        }
        #region generar reporte        
        protected void generar_Click(object sender, EventArgs e)
        {
            catalogoHorario _objHorario = new catalogoHorario();
            
            if (fecha.Value!="")
            {
                DateTime dia = Convert.ToDateTime(fecha.Value);
                if (dia.Day.ToString()!="Saturday" && dia.Day.ToString()!="Sunday")
                {
                    var datos = _objReporte.consultarReporteDiarioCurso(dia.Day.ToString(),Convert.ToInt32(ddlPeriodo.SelectedValue), Convert.ToInt32(ddlCarrera.SelectedValue),Convert.ToInt32(ddlSemestre.SelectedValue),ddlParalelo.SelectedValue, Convert.ToDateTime(fecha.Value));
                    if (datos.Count()>0)
                    {
                        ReportParameter[] reportParameter = new ReportParameter[20];
                        reportParameter[0] = new ReportParameter("semestre", ddlSemestre.SelectedValue);
                        reportParameter[1] = new ReportParameter("paralelo", "A");
                        reportParameter[2] = new ReportParameter("periodo", ddlPeriodo.SelectedItem.Text);
                        reportParameter[3] = new ReportParameter("dia", fecha.Value);
                        reportParameter[4] = new ReportParameter("carrera", ddlCarrera.SelectedItem.Text);
                        int contador = 1, docenteId = 0;
                        var docentes = _objDocente.consultarDocentesXIdCarrera(Convert.ToInt32(ddlCarrera.SelectedValue));
                        List<Negocio.clases_tontas.horarioClases> _lista = new List<Negocio.clases_tontas.horarioClases>();
                        foreach (var item in _objDistribucion.obtenerDistribucionXSemestre(Convert.ToInt32(ddlSemestre.SelectedValue), Convert.ToInt32(ddlCarrera.SelectedValue), ddlParalelo.SelectedValue))
                        {
                            var horas = _objHorario.consultarDistribucionesDiarias(dia.DayOfWeek.ToString(), item.idDistribucion,Convert.ToInt32(ddlPeriodo.SelectedValue)).Where(C => C.fecha == Convert.ToDateTime(fecha.Value));
                            if (horas.Count() > 0)
                            {
                                foreach (var item2 in horas)
                                {
                                    var materia = _objDistribucion.obtenerDistribucionId(item.idDistribucion).FirstOrDefault();

                                    foreach (var item4 in docentes)
                                    {
                                        var comprobacion = _objDistribucion.obtenerDistribucion(item4.idDocente).Where(C => C.idDistribucion == item.idDistribucion);
                                        if (comprobacion.Count() > 0)
                                        {
                                            docenteId = item4.idDocente;
                                            break;
                                        }
                                    }
                                    var profe = _objDocente.consultarDocenteXId(docenteId);
                                    string[] nombreProfe = profe.nombre.Split(new Char[] { ' ' });
                                    _lista.Add(new Negocio.clases_tontas.horarioClases { profesor = nombreProfe[0] + " " + nombreProfe[2], materia = materia.Nombre, horaEntrada = item2.horaEntrada, horaSalida = item2.horaSalida, observacion = item2.observacion });

                                }
                            }
                        }

                        foreach (var item in _lista.OrderBy(C => C.horaEntrada))
                        {
                            int carrera = Convert.ToInt32(ddlCarrera.SelectedValue);

                            DateTime horaSalida = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, int.Parse(item.horaSalida.Substring(0, 2).Replace(':', ' ')), 0, 0);
                            DateTime horaEntrada = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, int.Parse(item.horaEntrada.Substring(0, 2).Replace(':', ' ')), 0, 0);
                            //restar y obtener las horas diarias
                            int horaDiaria = (horaSalida.Subtract(horaEntrada)).Hours;

                            string automatica = "";
                            if (item.observacion == 211048)
                            {
                                automatica = "NO";
                            }
                            else
                            {
                                automatica = "SI";
                            }
                            if (contador == 1 && horaDiaria == 1)
                            {
                                ///primera hora
                                reportParameter[5] = new ReportParameter("asig1", item.materia);
                                reportParameter[6] = new ReportParameter("pro1", item.profesor);
                                reportParameter[7] = new ReportParameter("auto1", automatica);
                            }
                            else if (contador == 1 && horaDiaria == 2)
                            {
                                ///segunda hora
                                reportParameter[5] = new ReportParameter("asig1", item.materia);
                                reportParameter[6] = new ReportParameter("pro1", item.profesor);
                                reportParameter[7] = new ReportParameter("auto1", automatica);
                                reportParameter[8] = new ReportParameter("asig2", item.materia);
                                reportParameter[9] = new ReportParameter("pro2", item.profesor);
                                reportParameter[10] = new ReportParameter("auto2", automatica);
                                contador += 1;

                            }
                            else if (contador == 1 && horaDiaria == 3)
                            {
                                ///segunda hora
                                reportParameter[5] = new ReportParameter("asig1", item.materia);
                                reportParameter[6] = new ReportParameter("pro1", item.profesor);
                                reportParameter[7] = new ReportParameter("auto1", automatica);
                                reportParameter[8] = new ReportParameter("asig2", item.materia);
                                reportParameter[9] = new ReportParameter("pro2", item.profesor);
                                reportParameter[10] = new ReportParameter("auto2", automatica);
                                reportParameter[11] = new ReportParameter("asig3", item.materia);
                                reportParameter[12] = new ReportParameter("pro3", item.profesor);
                                reportParameter[13] = new ReportParameter("auto3", automatica);
                                contador += 1; contador += 1;

                            }
                            else if (contador == 2 && horaDiaria == 1)
                            {
                                ///segunda hora
                                reportParameter[8] = new ReportParameter("asig2", item.materia);
                                reportParameter[9] = new ReportParameter("pro2", item.profesor);
                                reportParameter[10] = new ReportParameter("auto2", automatica);
                            }
                            else if (contador == 2 && horaDiaria == 2)
                            {
                                ///segunda hora
                                reportParameter[8] = new ReportParameter("asig2", item.materia);
                                reportParameter[9] = new ReportParameter("pro2", item.profesor);
                                reportParameter[10] = new ReportParameter("auto2", automatica);
                                reportParameter[11] = new ReportParameter("asig3", item.materia);
                                reportParameter[12] = new ReportParameter("pro3", item.profesor);
                                reportParameter[13] = new ReportParameter("auto3", automatica);
                                contador += 1;

                            }
                            else if (contador == 2 && horaDiaria == 3)
                            {
                                ///segunda hora
                                reportParameter[8] = new ReportParameter("asig2", item.materia);
                                reportParameter[9] = new ReportParameter("pro2", item.profesor);
                                reportParameter[10] = new ReportParameter("auto2", automatica);
                                reportParameter[11] = new ReportParameter("asig3", item.materia);
                                reportParameter[12] = new ReportParameter("pro3", item.profesor);
                                reportParameter[13] = new ReportParameter("auto3", automatica);
                                reportParameter[14] = new ReportParameter("asig4", item.materia);
                                reportParameter[15] = new ReportParameter("pro4", item.profesor);
                                reportParameter[16] = new ReportParameter("auto4", automatica);
                                contador += 1; contador += 1;
                            }
                            else if (contador == 3 && horaDiaria == 1)
                            {
                                ///tercer hora
                                reportParameter[11] = new ReportParameter("asig3", item.materia);
                                reportParameter[12] = new ReportParameter("pro3", item.profesor);
                                reportParameter[13] = new ReportParameter("auto3", automatica);
                            }
                            else if (contador == 3 && horaDiaria == 2)
                            {
                                ///tercer hora
                                reportParameter[11] = new ReportParameter("asig3", item.materia);
                                reportParameter[12] = new ReportParameter("pro3", item.profesor);
                                reportParameter[13] = new ReportParameter("auto3", automatica);
                                reportParameter[14] = new ReportParameter("asig4", item.materia);
                                reportParameter[15] = new ReportParameter("pro4", item.profesor);
                                reportParameter[16] = new ReportParameter("auto4", automatica);
                                contador += 1;
                            }
                            else if (contador == 3 && horaDiaria == 3)
                            {
                                ///tercer hora
                                reportParameter[11] = new ReportParameter("asig3", item.materia);
                                reportParameter[12] = new ReportParameter("pro3", item.profesor);
                                reportParameter[13] = new ReportParameter("auto3", automatica);
                                reportParameter[14] = new ReportParameter("asig4", item.materia);
                                reportParameter[15] = new ReportParameter("pro4", item.profesor);
                                reportParameter[16] = new ReportParameter("auto4", automatica);
                                reportParameter[17] = new ReportParameter("asig5", item.materia);
                                reportParameter[18] = new ReportParameter("pro5", item.profesor);
                                reportParameter[19] = new ReportParameter("auto5", automatica);
                                contador += 1; contador += 1;
                            }


                            else if (contador == 4 && horaDiaria == 1)
                            {
                                ///cuarta hora
                                reportParameter[14] = new ReportParameter("asig4", item.materia);
                                reportParameter[15] = new ReportParameter("pro4", item.profesor);
                                reportParameter[16] = new ReportParameter("auto4", automatica);
                            }
                            else if (contador == 4 && horaDiaria == 2)
                            {
                                ///cuarta hora
                                reportParameter[14] = new ReportParameter("asig4", item.materia);
                                reportParameter[15] = new ReportParameter("pro4", item.profesor);
                                reportParameter[16] = new ReportParameter("auto4", automatica);
                                reportParameter[17] = new ReportParameter("asig5", item.materia);
                                reportParameter[18] = new ReportParameter("pro5", item.profesor);
                                reportParameter[19] = new ReportParameter("auto5", automatica);
                                contador += 1;
                            }
                            else
                            {
                                ///quinta hora
                                reportParameter[17] = new ReportParameter("asig5", item.materia);
                                reportParameter[18] = new ReportParameter("pro5", item.profesor);
                                reportParameter[19] = new ReportParameter("auto5", automatica);
                            }
                            contador += 1;
                        }
                        if (_lista.Count() == 0)
                        {
                            ///segunda hora
                            reportParameter[5] = new ReportParameter("asig1", "");
                            reportParameter[6] = new ReportParameter("pro1", "");
                            reportParameter[7] = new ReportParameter("auto1", "");
                            reportParameter[8] = new ReportParameter("asig2", "");
                            reportParameter[9] = new ReportParameter("pro2", "");
                            reportParameter[10] = new ReportParameter("auto2", "");
                            reportParameter[11] = new ReportParameter("asig3", "");
                            reportParameter[12] = new ReportParameter("pro3", "");
                            reportParameter[13] = new ReportParameter("auto3", "");
                            reportParameter[14] = new ReportParameter("asig4", "");
                            reportParameter[15] = new ReportParameter("pro4", "");
                            reportParameter[16] = new ReportParameter("auto4", "");
                            reportParameter[17] = new ReportParameter("asig5", "");
                            reportParameter[18] = new ReportParameter("pro5", "");
                            reportParameter[19] = new ReportParameter("auto5", "");
                        }
                        else
                            if (contador == 2)
                            {
                                reportParameter[8] = new ReportParameter("asig2", "");
                                reportParameter[9] = new ReportParameter("pro2", "");
                                reportParameter[10] = new ReportParameter("auto2", "");
                                reportParameter[11] = new ReportParameter("asig3", "");
                                reportParameter[12] = new ReportParameter("pro3", "");
                                reportParameter[13] = new ReportParameter("auto3", "");
                                reportParameter[14] = new ReportParameter("asig4", "");
                                reportParameter[15] = new ReportParameter("pro4", "");
                                reportParameter[16] = new ReportParameter("auto4", "");
                                reportParameter[17] = new ReportParameter("asig5", "");
                                reportParameter[18] = new ReportParameter("pro5", "");
                                reportParameter[19] = new ReportParameter("auto5", "");
                            }
                            else
                                if (contador == 3)
                                {
                                    ///tercer hora
                                    reportParameter[11] = new ReportParameter("asig3", "");
                                    reportParameter[12] = new ReportParameter("pro3", "");
                                    reportParameter[13] = new ReportParameter("auto3", "");
                                    reportParameter[14] = new ReportParameter("asig4", "");
                                    reportParameter[15] = new ReportParameter("pro4", "");
                                    reportParameter[16] = new ReportParameter("auto4", "");
                                    reportParameter[17] = new ReportParameter("asig5", "");
                                    reportParameter[18] = new ReportParameter("pro5", "");
                                    reportParameter[19] = new ReportParameter("auto5", "");
                                }
                                else if (contador == 4)
                                {
                                    ///cuarta hora
                                    reportParameter[14] = new ReportParameter("asig4", "");
                                    reportParameter[15] = new ReportParameter("pro4", "");
                                    reportParameter[16] = new ReportParameter("auto4", "");
                                    reportParameter[17] = new ReportParameter("asig5", "");
                                    reportParameter[18] = new ReportParameter("pro5", "");
                                    reportParameter[19] = new ReportParameter("auto5", "");
                                }
                                else if (contador == 5)
                                {
                                    reportParameter[17] = new ReportParameter("asig5", "");
                                    reportParameter[18] = new ReportParameter("pro5", "");
                                    reportParameter[19] = new ReportParameter("auto5", "");
                                }

                        ReportViewer1.LocalReport.DataSources.Clear();

                        ReportDataSource dataSourceAsistencia = new ReportDataSource();

                        dataSourceAsistencia.Name = "dtsComisionDiario";
                        dataSourceAsistencia.Value = datos;

                        ReportViewer1.LocalReport.DataSources.Add(dataSourceAsistencia);

                        ReportViewer1.LocalReport.ReportEmbeddedResource = "Presentacion.controlasistencia.reports.reportComisionDiario.rdlc";
                        ReportViewer1.LocalReport.ReportPath = "controlasistencia/reports/reportComisionDiario.rdlc";

                        ReportViewer1.LocalReport.SetParameters(reportParameter);
                        var parame = ReportViewer1.LocalReport.GetParameters();
                        ReportViewer1.Visible = true;
                        ReportViewer1.DataBind();
                        ReportViewer1.LocalReport.Refresh();  
                    }
                    else
                    {
                        ClientScript.RegisterStartupScript(GetType(), "jsMensaje", "javascript:errorMessage('No existen datos para este reporte');", true);
                    }
                   
                }
                else
                {
                    ClientScript.RegisterStartupScript(GetType(), "jsMensaje", "javascript:errorMessage('Debe de elegir un dia');", true);
                }
            }
            else
            {
                ClientScript.RegisterStartupScript(GetType(),"jsMensaje","javascript:errorMessage('Debe de elegir un dia');",true);
            }
        }
        #endregion
    }
}